#include <REGX52.H>

sbit I2C_SCL = P2^1;
sbit I2C_SDA = P2^0;

/**********************************************************************************/

/**
  * @brief  I2C开始时序
  * @param  无
  * @retval 无
  */
void I2C_Start()
{
	I2C_SDA = 1;//保证开始时序开始时
	I2C_SCL = 1;//SDA和SCL都是 1
	
	I2C_SDA = 0;//开始时序
	I2C_SCL = 0;
}

/**********************************************************************************/

/**
  * @brief  I2C停止时序
  * @param  无
  * @retval 无
  */
void I2C_Stop()
{
	I2C_SDA = 0;//保证停止时序开始时

	I2C_SCL = 1;//停止时序
	I2C_SDA = 1;
}

/**********************************************************************************/

/**
  * @brief  向从机发送一个字符数据
  * @param  Byte 需要发送的数据
  * @retval 无
  */
void I2C_SentByte(unsigned char Byte)
{
	int i = 0;
	for (i = 0;i < 8;i++)//向从机传输数据
	{
		I2C_SDA = Byte & (0x80 >> i);//取位
		I2C_SCL = 1;//拉高读取
		I2C_SCL = 0;//拉低恢复
	}
}

/**********************************************************************************/

/**
  * @brief  主机得到从机发送的字符数据
  * @param  无
  * @retval Byte 从机发送的字符数据
  */
unsigned char I2C_ReceiveByte()
{
	int i = 0;//设置for循环
	
	unsigned char Byte = 0x00;//用于得到从机数据
	I2C_SDA = 1;//主机释放总线，由从机控制
	
	
	for (i = 0;i < 8;i++)//得到从机发出的数据
	{
		I2C_SCL = 1;//拉高读取
		if (I2C_SDA)//如果接收到1则Byte对应位置1
		{
			Byte |= (0x80 >> i);//对应位置一，其他位不变
		}
		I2C_SCL = 0;//拉低恢复
	}
	
	return Byte;//返回数据
}

/**********************************************************************************/

/**
  * @brief  主机发送应答
  * @param  AckBit 给1则发送应答，0则不发送应答
  * @retval 无
  */
void I2C_SendAck(bit AckBit)//bit ——> C51特有数据类型，定义一位无符号整形
{
	I2C_SDA = AckBit;//通信协议规定给0不应答，给1应答
	
	I2C_SCL = 1;//拉高接收应答
	I2C_SCL = 0;//拉低恢复
}

/**********************************************************************************/

/**
  * @brief  主机接收应答
  * @param  无
  * @retval 从机发送的应答
  */
unsigned char I2C_ReceiveAck()
{
	unsigned char AckBit = 0;//用于得到从机应答（也可以改成用 bit ）
	I2C_SDA = 1;//主机释放总线，由从机控制
	
	I2C_SCL = 1;//拉高接收应答
	AckBit = I2C_SDA;//得到数据
	I2C_SCL = 0;//拉低恢复
	
	return AckBit;//返回数据
}

/**********************************************************************************/



























